package aditii.impl.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import util.ConnectionManager;
import util.Instances;
import aditii.domain.Produto;
import aditii.interfaces.DAO.ListarProdutosInterfaceDAO;

public class ListarProdutosDAOImpl implements ListarProdutosInterfaceDAO {
	
	private Connection conn;
	
	public ListarProdutosDAOImpl(DataSource datasource) throws SQLException{
		conn = datasource.getConnection();
	}
	
	public ListarProdutosDAOImpl() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public List<Produto> listaTodosProdutos() throws SQLException{
		
		ArrayList<Produto> produtos = new ArrayList<Produto>();
		try {
			conn = ConnectionManager.con();
			PreparedStatement statement = conn.prepareStatement("SELECT * FROM produto");
			ResultSet resultset = statement.executeQuery();
			produtos = getResultSetProdutos(resultset, -1);
			resultset.close();
			statement.close();
		} catch (SQLException e) {
			throw new SQLException("Nao existe produto cadastrado: " +e);
		}
		return produtos;

	}

	@Override
	public List<Produto> listaProdutosCategoria(int idCategoria) throws SQLException {
		ArrayList<Produto> produtos = null;
		try {

			conn = ConnectionManager.con();
			PreparedStatement statement = conn.prepareStatement("SELECT idProduto,"
					+ "nome, preco, descricao, foto, tamanho, cor FROM produto "
					+ "WHERE categoria_idCategoria = ?");
			statement.setInt(1, idCategoria);
			ResultSet resultset = statement.executeQuery();
			produtos = getResultSetProdutos(resultset, idCategoria);
			resultset.close();
			statement.close();
		} catch (SQLException e) {
			throw new SQLException("Nao existe produto cadastrado: " +e);
		}
		return produtos;
	}

	private ArrayList<Produto> getResultSetProdutos(ResultSet resultset, int idCategoria){
		
		ArrayList<Produto> produtos = new ArrayList<Produto>();
		try {
			while (resultset.next()) {
				Produto produto = Instances.getInstanceProduto();
				produto.setCodProduto(resultset.getInt("idProduto"));
				produto.setNomeProduto(resultset.getString("nome")); 
				produto.setPreco(resultset.getDouble("preco"));
				produto.setDescricao(resultset.getString("descricao"));
				produto.setFoto(resultset.getString("foto"));
				produto.setTamanho(resultset.getString("tamanho"));
				produto.setCor(resultset.getString("cor"));
				if(idCategoria >= 0){
					produto.getCategoria().setId(idCategoria);
				}else{
					produto.getCategoria().setId(resultset.getInt("categoria_idCategoria"));
				}
				produtos.add(produto);  
			}
			resultset.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		return produtos;
	}
	
}
